package lesson05.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 所有的池化技术都会实现 DataSource 这个接口
 * Druid（德鲁伊）是阿里巴巴开发的号称为监控而生的数据库连接池，Druid是目前最好的数据库连接池。
 * 在功能、性能、扩展性方面，都超过其他数据库连接池，同时加入了日志监控，可以很好的监控DB池连接和SQL的执行情况。
 */
public class TestDruid {
    public static void main(String[] args) {
        Connection conn = null;
        try {
            //3.加载配置文件(在resource目录下)
            Properties pro = new Properties();
            InputStream is = TestDruid.class.getClassLoader().getResourceAsStream("lesson05/druid/druid.properties");
            pro.load(is);

            //4.获取连接池对象
            DataSource ds = DruidDataSourceFactory.createDataSource(pro);
            //5.获取连接
            conn = ds.getConnection();

            // 编写查询语句
            String sql = "SELECT * FROM test_table";
            // 获取PreparedStatement对象并预编译sql（PreparedStatement对象防止sql注入）
            PreparedStatement statement = conn.prepareStatement(sql);
            // 执行查询语句获得查询结果
            ResultSet resultSet = statement.executeQuery();
            // 处理查询结果
            while (resultSet.next()) {
                String test1 = resultSet.getString("test1");
                String makeLendingTime = resultSet.getString("MAKE_LENDING_TIME");
                String isRepayLending = resultSet.getString("IS_REPAY_LENDING");

                System.out.println("test1: " + test1 + ", makeLendingTime: " + makeLendingTime + ", isRepayLending: " + isRepayLending);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                // 归还连接
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
